#coding=utf-8
__author__ = 'Meteor'
import jsonpath
import json
import os

class Extract:

    def extract_data(self,api,response):
        # 根据apiData.yaml文件中，接口中包含extract，则表示需要提取响应中的数据
        for i in api.get('extract'):
            # 将接口响应报文转换成字典
            response = json.loads(response.text)
            # 使用jsonpath方式，提取数据
            x = jsonpath.jsonpath(response, api.get('extract').get(i))[0]
            # 将提取到的数据，保存到环境变量中
            os.environ.update({i: x})


    def is_update(self,api):
        '''
        {'url': '/main/system/user/add', 'headers': {'token': '${token}'}, 'data': {'account': 'meteor124', 'name': 'meteor124', 'passWord': 123, 'createDate': datetime.date(2021, 11, 10), 'status': 1, 'modelcodes': 1}}
        :param api: 从yaml文件中读取的
        :return: 
        '''
        for i in api:
            # 判断api中每个key的value，是不是字典
            if isinstance(api.get(i), dict):
                # 如果是字典，再提取每个value中的key和value
                for x, y in api.get(i).items():
                    # 判断value的值是不是字符串类型。不是字符串，则跳过
                    if not isinstance(y, str):
                        continue
                    # 判断是否使用${}引起来的，如果是，则表示需要从环境变量中取数据进行替换
                    if y.startswith('${') and y.endswith('}'):
                        api.get(i).update({x: os.environ.get(y.replace("${", '').replace('}', ''))})



exrtact = Extract()
if __name__ == '__main__':
    os.environ.update({'token':'12234245'})
    api = {'url': '/main/system/user/show', 'pasrme': {'page': 1}, 'metch': 'get', 'headers': {'token': '${token}'}}
    exrtact.is_update(api)
    print(api)